![Azure Cognitive SearchとCognitive Servicesの深堀り:実践的に画像タグ付けと説明文の生成を試してみた](https://devio2023-media.developers.io/wp-content/uploads/2022/08/devio-eyecatch-Azure.png)
Azure Cognitive SearchとCognitive Servicesの深堀り:実践的に画像タグ付けと説明文の生成を試してみた
はじめに
新規事業部の田村です。最近、OpenAIなどの話題で盛り上がっています。Azureと連携することができるそうなのですが、そもそもAzureについて何ができるのか気になってきました。
AzureにはOpenAI以外にもAIのサービスがあり、今回はCognitive Searchとその機能・活用例をまとめてみました。
Cognitive Searchとは
Cognitive Searchとは一言で言うと、検索エンジンです。ブラウザで検索するような感じで、データを検索できます。
Cognitive SearchはMicrosoftサーバにアップロードされたデータのインデックスを作り、検索できるサービスです。このサービスはユーザーの意図を理解し、スコアリングにより最も関連性の高い検索結果をランクづけするAIモデルによって成り立っています。
検索というと従来はルールベースで開発者が関連性の高さを決めていました。人が関連性の高さを決めていたので、データが大量にある場合やデータの種類がバラバラであるとコストがそれに応じて高くなっていました。
しかしCognitive Searchを利用するとAIが関連性を決定します。なおかつ画像や音声、自然言語などの非構造データも検索できるので、大量かつ多様なデータを扱う場合に対しても検索機能を手軽に使えることができます。
Cognitive Searchでできること
Cognitive Servicesと連携することによって、非構造データの検索ができます。非構造データでの検索例として、以下が挙げられます。
- 画像の検索
- ドキュメントの検索
- 音声の検索
検索ですが、データさえアップロードすればアップロードしたデータを検索できるサービスが作れます。
Cognitive Searchのユースケースとしては、検索できるサービスを提供するので何か検索したい時に使えます。
例えば、ファイルの種類が多く管理されていないフォルダから特定のキーワードを入力すると該当するファイルを検索できたりできます。
Cognitive Servicesとは
マイクロソフトが提供するAIサービスです。機能としては、
- Vision → 画像認識や人物特定、物体検出、OCR機能
- Speech → 音声データを自然言語、またはその逆に変換できる機能
- Language → テキストの意味を理解し、他言語へ翻訳やQ&Aの機能
- Decision → コンテンツモデレーションやレコメンデーション、意思決定に関わるデータを提供、質問回答機能
があります。AIというとデータを用いて学習させてモデルを作るというイメージが強いですが、モデルはすでにMicrosoftが作っていますのでこのステップは省くことも可能です。ただ使ってみて精度が良くないなど感じる場合は、モデルのカスタマイズ機能も提供されていますので独自のモデルを作成することも可能です。
事前学習モデルの種類ですが、複数存在します。それぞれ業界や目的に応じて使い分けができます。Visionに関してですが、以下の用途に分けてモデルを使い分けられます。
- General(一般)
- Retail(小売)
- Food(食べ物)
- Landmarks(背景)
Cognitive Searchのアーキテクチャ
一般的に使われるAzure Cognitive Searchでのアーキテクチャを示します。
データソースからはJSON、テーブルデータ、テキストファイルなどのドキュメントデータや画像データ、音声データから選択でき、それをCognitive Searchと連携させてRESR APIなどで提供できます。
上述しましたがCognitive Searchは、Cognitive Serviceと連携可能です。
上記のアーキテクチャは一般に考えられたものですが、今回使用するアーキテクチャは以下です。
Cognitive Searchの活用例
ここでは、ECサイトでの活用事例について記載したいと思います。
ECサイトではさまざまな商品が並んでいますけど、それぞれの商品にはどのカテゴリーに紐づくか設定しています。これは今現在、商品の画像を見てどのカテゴリーに属するか人が行なっています。
同様に商品の説明文もECサイトの管理者がどういう商品なのか、どういう特徴があるのかをテキスト入力しています。
今回はこの作業(イメージタグ生成、商品説明文の生成)をAzureのAIで置き換えてみたいと思います。
今回使用するAzureのサービスは、Azure Cognitive SearchとAzure Cognitive Services、Azure Blob Storageです。それぞれの用途としては、
- Azure Cognitive Search → Azure Cognitive Servicesと連携させて、興味のある画像データを検索します
- Azure Cognitive Services → 今回のメインのタスクとなるイメージタグ・画像の説明文の生成を行います
- Azure Blob Storage → データを保存するストレージとして利用します
として使用します。
データセットとしては、フリーの画像を手に入れて活用しています。
今回ECサイトを模して行うので、カテゴリーはファッションのものにしようと思います。
生成するタグは、
- シャツ
- シューズ
- ジーンズ
- その他
とします。ただしその他には、シャツ・シューズ・ジーンズ以外のものがカテゴライズされるとします。
また補足ですが、データベースやストレージに登録されてあればタグ生成に使われる画像データは容易に取得可能です。
ECサイト(仮)での検証
解決する業務課題は、商品データにタグ付けする作業と商品説明文を作成する業務の効率化です。
この作業はある程度自動化されている部分はあるでしょうが、人が行っていることが大半です。データが少量であればそんなに苦ではないでしょうが、ECサイトなど大量の商品を抱える場合、時間がかかってしまいます。そこで今回、この作業をAIに代替ですることができるか検証します。
それでは、Azureでの検証結果について記載したいと思います。
イメージタグの生成ですが、Custom Visionという機能を使えばこちらで指定したタグを設定できます。ただし条件があって、学習させる必要があるので最低5個の画像データが必要です。(データがあればあるほど嬉しいので、5個で精度が出るとは言えない)。
今回は5個の画像でどこまで精度が出るか試してみます。
ジーンズの学習データは以下のような画像です。
シューズなどそれぞれのラベルされた画像データも学習させてますが、画像の掲載は割愛します。
以下のテストデータを入れてどのようなイメージタグが作成されるかですが、このデータのイメージタグを予測させます。
その結果ですが、以下のように出ました。
ジーンズが一番可能性が高いと予測されてますね。ひとまずイメージタグの生成はできています。
ただ懸念点として、Probabilityが低いことです。Probabilityが低い理由は、学習した画像と向きが違うこと、またジーンズ以外のものが撮影に写っていることが考えられます。単純にいうと、学習不足なのかなと思います。
今回学習したデータが少ないことと、学習時間も1時間とかなりプアな状況で検証したので、この2つの要因を削れば精度は上がりそうです。
結論としては、データのタグ付けは解決できそうです。
画像の説明文生成についても試してみました。これは事前学習モデルを使用していますので、イメージタグとはプロセスが異なります。
まずこちらのデータですが、
ヘッドフォンです。ヘッドフォンにキャッチーな説明文が生成されればOKです。
このデータに商品説明をさせてみると、
[{
"translations": [{
"text": "白いリングのペア
",
"to": "ja"
}]
}]
ヘッドフォンなのですが、そもそもヘッドフォンと認識しておらず、リング(指輪)として認識されていますね。また説明文も非常に質素なので、商品を説明するとなるとデフォルトのままでは使うにはいまひとつという感想です。ただこのAIはカスタマイズ可能なので、カスタマイズしたらどう出るか楽しみですね。
結論としては、データの説明文の生成は解決できるかまだわからないです。
まとめ
今回Cognitive Search・Cognitive ServicesのVisionについて調べました。そして、そのユースケースとして考えられるイメージタグの生成・説明文の生成を検証しました。
AIをスクラッチで作ることなく、すでにサービスとして提供されているAIを利用することで、スピード感を持ってAIを利用したサービスができそうです。
精度に関して懸念点は残るものの、カスタマイズすれば十分通用しそうですので、今後カスタマイズしたらどうなるか、検証したいです。